/* Ingeniería - Crear equipo patrón */

package edu.client;

import java.util.LinkedList;
import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TabPanel;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;

import edu.client.IngenieriaService.IngenieriaService;
import edu.client.IngenieriaService.IngenieriaServiceAsync;
import edu.client.ValidacionesService.ValidacionesService;
import edu.client.ValidacionesService.ValidacionesServiceAsync;
import edu.shared.DTO.ClaseEquipoPatronDTO;
import edu.shared.DTO.EquipoPatronDTO;
import edu.shared.DTO.SubclaseEquipoPatronDTO;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;

public class P_CrearEquipoPatron extends Composite {
	
	private String tituloTab;
	TabPanel padre;
	
	private ListBox codigoClaseCombo;
	private TextBox nombreClaseTB;
	private TextBox codigoSubclaseTB;
	private TextBox nombreSubclaseTB;
	private TextArea descripcionTecnicaTA;
	private TextBox puntoPedidoTB;
	private TextBox loteTB;
	
	private Button crearEquipoPatronBtn;
	
	private IngenieriaServiceAsync ingenieriaService;
	private ValidacionesServiceAsync validacionesService;

	public P_CrearEquipoPatron(TabPanel padre, String titulo) {
		
		this.tituloTab = titulo;
		this.padre = padre;
		ingenieriaService = GWT.create(IngenieriaService.class);
		validacionesService = GWT.create(ValidacionesService.class);
	
		LayoutPanel layoutPanel = new LayoutPanel();
		initWidget(layoutPanel);
		layoutPanel.setSize((Window.getClientWidth() - 55) + "px", "615px");

		
		Label claseEquipoLabel = new Label("CLASE DE EQUIPO");
		claseEquipoLabel.setStyleName("labelTitulo");
		layoutPanel.add(claseEquipoLabel);
		layoutPanel.setWidgetLeftWidth(claseEquipoLabel, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(claseEquipoLabel, 15.0, Unit.PX, 50.0, Unit.PX);
		
		Label codigoClaseLabel = new Label("CÓDIGO DE CLASE:");
		codigoClaseLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		codigoClaseLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(codigoClaseLabel);
		layoutPanel.setWidgetLeftWidth(codigoClaseLabel, 5.0, Unit.PCT, 12.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(codigoClaseLabel, 75.0, Unit.PX, 19.0, Unit.PX);
		
		// LISTA DESPLEGABLE CLASE DE EQUIPO
		
		codigoClaseCombo = new ListBox();
		layoutPanel.add(codigoClaseCombo);
		layoutPanel.setWidgetLeftWidth(codigoClaseCombo, 17.5, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(codigoClaseCombo, 70.0, Unit.PX, 32.0, Unit.PX);
		
		codigoClaseCombo.addChangeHandler(new ChangeHandler() {

			@Override
			public void onChange(ChangeEvent event) {
				
				// si se selecciona NUEVA CLASE				
				if(codigoClaseCombo.getSelectedIndex() == 0) {
					
					nombreClaseTB.setEnabled(true);	
					nombreClaseTB.setText("");
	
					codigoSubclaseTB.setText("01");
					nombreSubclaseTB.setText("");

				}
				
				// si se selecciona una CLASE EXISTENTE				
				else {
										
					ingenieriaService.buscarSubclasesEquipoPatron(Integer.parseInt(codigoClaseCombo.getItemText(codigoClaseCombo.getSelectedIndex())), new AsyncCallback<List<SubclaseEquipoPatronDTO>>() {
						
						public void onSuccess(List<SubclaseEquipoPatronDTO> listaSubclasesEquipoPatronDTO) {

							nombreClaseTB.setEnabled(false);
							nombreClaseTB.setText(codigoClaseCombo.getValue(codigoClaseCombo.getSelectedIndex()));
							
							// se busca el primer número de subclase libre
							
							int nroNuevaSubclase = 1;
							int i = 0;
							
							while (i < listaSubclasesEquipoPatronDTO.size()) {
								
								// cuando se encuentra el primer hueco libre, se sale, y queda guardado el número del mismo
								if (nroNuevaSubclase != listaSubclasesEquipoPatronDTO.get(i).getCodigoSubclase()) {
									break;							
								}
								
								nroNuevaSubclase++;
								i++;
							}
									
							// obtiene el código de sublcase más alto (de la clase que se está manipulando) y le suma 1 para sugerirla como número de una nueva subclase
							codigoSubclaseTB.setEnabled(false);
							codigoSubclaseTB.setText(Validaciones.rellenarCodigo(nroNuevaSubclase));
							nombreSubclaseTB.setText("");	
						}

						@Override
						public void onFailure(Throwable caught) {
							Window.alert("ERROR EN EL SERVICIO");
						}	
					});
				}
			}
		});
		
		//		
		
		Label nombreClaseLabel = new Label("NOMBRE DE CLASE:");
		nombreClaseLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		nombreClaseLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(nombreClaseLabel);
		layoutPanel.setWidgetLeftWidth(nombreClaseLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(nombreClaseLabel, 75.0, Unit.PX, 19.0, Unit.PX);
		
		nombreClaseTB = new TextBox();
		layoutPanel.add(nombreClaseTB);
		layoutPanel.setWidgetLeftWidth(nombreClaseTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(nombreClaseTB, 70.0, Unit.PX, 32.0, Unit.PX);
		
		Label subclaseEquipoLabel = new Label("SUBCLASE DE EQUIPO");
		subclaseEquipoLabel.setStyleName("labelTitulo");
		layoutPanel.add(subclaseEquipoLabel);
		layoutPanel.setWidgetLeftWidth(subclaseEquipoLabel, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(subclaseEquipoLabel, 131.0, Unit.PX, 50.0, Unit.PX);
		
		Label codigoSubclaseLabel = new Label("CÓDIGO DE SUBCLASE:");
		codigoSubclaseLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		codigoSubclaseLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(codigoSubclaseLabel);
		layoutPanel.setWidgetLeftWidth(codigoSubclaseLabel, 5.0, Unit.PCT, 12.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(codigoSubclaseLabel, 190.0, Unit.PX, 19.0, Unit.PX);
		
		codigoSubclaseTB = new TextBox();
		codigoSubclaseTB.setEnabled(false);
		codigoSubclaseTB.setText("01");
		layoutPanel.add(codigoSubclaseTB);
		layoutPanel.setWidgetLeftWidth(codigoSubclaseTB, 17.5, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(codigoSubclaseTB, 185.0, Unit.PX, 32.0, Unit.PX);
		
		Label nombreSubclaseLabel = new Label("NOMBRE DE SUBCLASE:");
		nombreSubclaseLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		nombreSubclaseLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(nombreSubclaseLabel);
		layoutPanel.setWidgetLeftWidth(nombreSubclaseLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(nombreSubclaseLabel, 190.0, Unit.PX, 19.0, Unit.PX);
		
		nombreSubclaseTB = new TextBox();
		layoutPanel.add(nombreSubclaseTB);
		layoutPanel.setWidgetLeftWidth(nombreSubclaseTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(nombreSubclaseTB, 185.0, Unit.PX, 32.0, Unit.PX);
		
		Label detallesLabel = new Label("DETALLES DEL EQUIPO");
		detallesLabel.setStyleName("labelTitulo");
		layoutPanel.add(detallesLabel);
		layoutPanel.setWidgetLeftWidth(detallesLabel, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(detallesLabel, 246.0, Unit.PX, 50.0, Unit.PX);
		
		Label planoLabel = new Label("PLANO:");
		planoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		planoLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(planoLabel);
		layoutPanel.setWidgetLeftWidth(planoLabel, 5.0, Unit.PCT, 12.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(planoLabel, 302.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox planoTB = new TextBox();
		planoTB.setEnabled(false);
		planoTB.setText("00");
		layoutPanel.add(planoTB);
		layoutPanel.setWidgetLeftWidth(planoTB, 17.5, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(planoTB, 297.0, Unit.PX, 32.0, Unit.PX);
		
		Label versionLabel = new Label("VERSIÓN:");
		versionLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		versionLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(versionLabel);
		layoutPanel.setWidgetLeftWidth(versionLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(versionLabel, 302.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox versionTB = new TextBox();
		versionTB.setEnabled(false);
		versionTB.setText("M0");
		layoutPanel.add(versionTB);
		layoutPanel.setWidgetLeftWidth(versionTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(versionTB, 297.0, Unit.PX, 32.0, Unit.PX);
		
		Label descripcionTecnicaLabel = new Label("DESCRIPCIÓN TÉCNICA:");
		descripcionTecnicaLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		descripcionTecnicaLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(descripcionTecnicaLabel);
		layoutPanel.setWidgetLeftWidth(descripcionTecnicaLabel, 0.0, Unit.PCT, 17.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(descripcionTecnicaLabel, 380.0, Unit.PX, 19.0, Unit.PX);
		
		descripcionTecnicaTA = new TextArea();
		layoutPanel.add(descripcionTecnicaTA);
		layoutPanel.setWidgetLeftWidth(descripcionTecnicaTA, 17.5, Unit.PCT, 77.5, Unit.PCT);
		layoutPanel.setWidgetTopHeight(descripcionTecnicaTA, 340.0, Unit.PX, 100.0, Unit.PX);
		
		Label puntoPedidoLabel = new Label("PUNTO DE PEDIDO:");
		puntoPedidoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		puntoPedidoLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(puntoPedidoLabel);
		layoutPanel.setWidgetLeftWidth(puntoPedidoLabel, 5.0, Unit.PCT, 12.3, Unit.PCT);
		layoutPanel.setWidgetTopHeight(puntoPedidoLabel, 465.0, Unit.PX, 19.0, Unit.PX);
		
		puntoPedidoTB = new TextBox();
		layoutPanel.add(puntoPedidoTB);
		layoutPanel.setWidgetLeftWidth(puntoPedidoTB, 17.5, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(puntoPedidoTB, 460.0, Unit.PX, 32.0, Unit.PX);
		
		Label loteLabel = new Label("LOTE:");
		loteLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		loteLabel.setStyleName("gwt-LabelFormulario");
		layoutPanel.add(loteLabel);
		layoutPanel.setWidgetLeftWidth(loteLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		layoutPanel.setWidgetTopHeight(loteLabel, 465.0, Unit.PX, 19.0, Unit.PX);
		
		loteTB = new TextBox();
		layoutPanel.add(loteTB);
		layoutPanel.setWidgetLeftWidth(loteTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		layoutPanel.setWidgetTopHeight(loteTB, 460.0, Unit.PX, 32.0, Unit.PX);

		///PIE
		
		Label pieLabel = new Label("");
		pieLabel.setStyleName("labelTitulo");
		layoutPanel.add(pieLabel);
		layoutPanel.setWidgetLeftWidth(pieLabel, 2.5, Unit.PCT, 95.0, Unit.PCT);
		layoutPanel.setWidgetBottomHeight(pieLabel, 65.0, Unit.PX, 50.0, Unit.PX);
		
		/// BOTÓN CANCELAR
		
		Button cancelarBtn = new Button("CANCELAR");
		layoutPanel.add(cancelarBtn);
		layoutPanel.setWidgetRightWidth(cancelarBtn, 5.0, Unit.PCT, 10.0, Unit.PCT);
		layoutPanel.setWidgetBottomHeight(cancelarBtn, 15.0, Unit.PX, 28.0, Unit.PX);
		
		cancelarBtn.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				salir();
			}
		});
		
		///
		
		/// BOTÓN CREAR EQUIPO PATRÓN
		
		crearEquipoPatronBtn = new Button("CREAR");
		layoutPanel.add(crearEquipoPatronBtn);
		layoutPanel.setWidgetRightWidth(crearEquipoPatronBtn, 17.5, Unit.PCT, 10.0, Unit.PCT);
		layoutPanel.setWidgetBottomHeight(crearEquipoPatronBtn, 15.0, Unit.PX, 28.0, Unit.PX);
		
		// al hacer clic sobre el botón CREAR EQUIPO PATRÓN
		crearEquipoPatronBtn.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				
				crearEquipoPatronBtn.setEnabled(false);
				
				// si se quiere crear una clase nueva, sólo se verifica que el nombre de la clase no se repita en la base de datos.
				// el nombre de subclase puede ser cualquiera.
				if (codigoClaseCombo.getSelectedIndex() == 0) {
										
					validacionesService.nombreRepetido(nombreClaseTB.getText(), "ClaseEquipoPatron", "nombre", new AsyncCallback<Boolean>() {

						@Override
						public void onSuccess(Boolean nombreRepetido) {
						
							List<String> errores = new LinkedList<String>();
							String mensaje = "";

							errores = validarDatos();
							
							if (nombreRepetido) {
								errores.add("- El nombre de clase de equipo patrón ya existe.");
							}
							
							// si hubo errores, se arma el mensaje y se alerta al usuario.
							if(errores.size() > 0) {
								
								mensaje = mensaje + errores.get(0);
								
								for(int i=1; i<errores.size(); i++) {
									mensaje = mensaje + '\n' + '\n' + errores.get(i);
								}
								
								Window.alert(mensaje);
								crearEquipoPatronBtn.setEnabled(true);
							}
							
							// si no hubo ningún error, se procede a registrar el equipo.
							else {								
								registrarEquipoPatron();					
							}
						}

						@Override
						public void onFailure(Throwable caught) {
							Window.alert("ERROR EN EL SERVICIO");		
							crearEquipoPatronBtn.setEnabled(true);
						}
					});
				}
				
				// si se seleccionó una clase existente, sólo se verifica que el nombre de la subclase no se repita para esa clase en la base de datos.
				else {
							
					validacionesService.nombreSubclaseRepetido(nombreSubclaseTB.getText(), codigoClaseCombo.getItemText(codigoClaseCombo.getSelectedIndex()), new AsyncCallback<Boolean>() {

						@Override
						public void onSuccess(Boolean nombreRepetido) {
						
							List<String> errores = new LinkedList<String>();
							String mensaje = "";

							errores = validarDatos();
							
							if (nombreRepetido) {
								errores.add("- El nombre de subclase de equipo patrón ya existe para la clase seleccionada.");
							}
							
							// si hubo errores, se arma el mensaje y se alerta al usuario.
							if(errores.size() > 0) {
								
								mensaje = mensaje + errores.get(0);
								
								for(int i=1; i<errores.size(); i++) {
									mensaje = mensaje + '\n' + '\n' + errores.get(i);
								}
								
								Window.alert(mensaje);
								crearEquipoPatronBtn.setEnabled(true);
							}
							
							// si no hubo ningún error, se procede a registrar el equipo.
							else {								
								registrarEquipoPatron();					
							}
						}

						@Override
						public void onFailure(Throwable caught) {
							Window.alert("ERROR EN EL SERVICIO");
							crearEquipoPatronBtn.setEnabled(true);
						}
					});
				
				}
			}
		});
		
		///
		
		/// CARGA DE LAS CLASES DE EQUIPO		
		cargarClasesEquipoPatron();		
		///
	}
	
	/** Método que carga la lista desplegable de clases de equipo patrón.
	 * 
	 */
	private void cargarClasesEquipoPatron() {
	
		ingenieriaService.buscarClasesEquipoPatron(new AsyncCallback<List<ClaseEquipoPatronDTO>>() {
			
			@Override
			public void onSuccess(List<ClaseEquipoPatronDTO> listaClasesEquipoPatronDTO) {

				// si aún no se ha creado ningún equipo patrón
				if (listaClasesEquipoPatronDTO.isEmpty()) {
					
					codigoClaseCombo.addItem("01 - NUEVA CLASE");
				}
				
				// si ya se han creado equipos patrones		
				else {
					
					// se calcula el siguiente número de clase (se busca el primer hueco)
					
					int nroNuevaClase = 1;
					int i = 0;
					
					while (i < listaClasesEquipoPatronDTO.size()) {
						
						// cuando se encuentra el primer hueco libre, se sale, y queda guardado el número del mismo
						if (nroNuevaClase != listaClasesEquipoPatronDTO.get(i).getCodigoClaseEquipoPatron()) {
							break;							
						}
						
						nroNuevaClase++;
						i++;
					}
					
					String nuevaClase = Validaciones.rellenarCodigo(nroNuevaClase) + " - NUEVA CLASE";
					
					codigoClaseCombo.addItem(nuevaClase);
					
					for(ClaseEquipoPatronDTO claseEquipoPatronDTO: listaClasesEquipoPatronDTO) {
						
						// se agrega como ítem al código de la clase, y como value al nombre de la clase (que se recupera cuando se selecciona el ítem en la lista desplegable)
						codigoClaseCombo.addItem(Validaciones.rellenarCodigo(claseEquipoPatronDTO.getCodigoClaseEquipoPatron()), claseEquipoPatronDTO.getNombre());	
					}	
				}		
			}

			@Override
			public void onFailure(Throwable caught) {
				Window.alert("ERROR EN EL SERVICIO");
			}
		});
	}
	
	/**
	 * Método que valida los datos ingresados por el usuario y devuelve una lista con los errores encontrados.
	 * @return lista de errores.
	 */
	private List<String> validarDatos() {
		
		Validaciones validar = new Validaciones();
		List<String> listaErrores = new LinkedList<String>();
		
		// se verifica que el nombre de clase no sea vacío.
		if (validar.textBoxVacio(nombreClaseTB.getText())) {
			listaErrores.add("- El nombre de clase no puede ser vacío.");
		}
		
		// se verifica que el nombre de subclase no sea vacío.
		if (validar.textBoxVacio(nombreSubclaseTB.getText())) {
			listaErrores.add("- El nombre de subclase no puede ser vacío.");
		}
		
		// se verifica que el lote sea un número entero positivo, cero, o vacío.
		if (!loteTB.getText().equals("")) {
			
			try {				
				int lote = Integer.parseInt(loteTB.getText());
				
				// si el lote es menor a cero.
				if (lote < 0) {
					throw new Exception();
				}
			}
			
			catch (Exception e) {
				listaErrores.add("- El lote sólo puede ser un número entero positivo, cero, o bien quedar vacío.");			
			}
		}
		
		// se verifica que el punto de pedido sea un número entero positivo, cero, o vacío.
		if (!puntoPedidoTB.getText().equals("")) {
			
			try {
				int puntoPedido = Integer.parseInt(puntoPedidoTB.getText());
				
				if (puntoPedido < 0) {
					throw new Exception();
				}
			}
			
			catch (Exception e) {
				listaErrores.add("- El punto de pedido sólo puede ser un número entero positivo, cero, o bien quedar vacío.");
			}
		}
				
		return listaErrores;
	}
	
	/** Método que registra el equipo patrón especificado en la pantalla.
	 * 
	 */
	private void registrarEquipoPatron() {
		
		EquipoPatronDTO equipoPatronDTO = new EquipoPatronDTO();
		
		// se crea la estrutucra del equipo patrón DTO.
		equipoPatronDTO.setCodigoClase(Integer.parseInt(codigoClaseCombo.getItemText(codigoClaseCombo.getSelectedIndex()).split(" ")[0]));
		equipoPatronDTO.setNombreClase(nombreClaseTB.getText().toUpperCase());
		
		equipoPatronDTO.setCodigoSubclase(Integer.parseInt(codigoSubclaseTB.getText()));
		equipoPatronDTO.setNombreSubclase(nombreSubclaseTB.getText().toUpperCase());
		
		equipoPatronDTO.setDescripcionTecnica(descripcionTecnicaTA.getText());
		
		if (!puntoPedidoTB.getText().equals("")) {
			equipoPatronDTO.setPuntoPedido(Integer.parseInt(puntoPedidoTB.getText()));
		}
				
		if (!loteTB.getText().equals("")) {
			equipoPatronDTO.setLote(Integer.parseInt(loteTB.getText()));
		}
		equipoPatronDTO.setActivo(true);
		equipoPatronDTO.setCantidadDisponible(0);
		equipoPatronDTO.setNroVersion("M0");
		equipoPatronDTO.setPlano(0);
							
		// se intenta hacer el registro del equipo patrón
		ingenieriaService.registrarEquipoPatron(equipoPatronDTO, new AsyncCallback<EquipoPatronDTO>() {

			@Override
			public void onSuccess(EquipoPatronDTO equipoCreado) {
				
				if (equipoCreado != null) {
										
					String codigoEquipoPatron = Validaciones.rellenarCodigoEquipoPatron(equipoCreado);
					
					Window.alert("El equipo patrón ha sido creado de manera exitosa.\nCódigo equipo patrón: " + codigoEquipoPatron);
					salir();
					
				} else
					Window.alert("No se ha podido crear el equipo patrón especificado.");
					crearEquipoPatronBtn.setEnabled(true);
			}

			@Override
			public void onFailure(Throwable caught) {
				Window.alert("ERROR EN EL SERVICIO");
				crearEquipoPatronBtn.setEnabled(true);
			}
		});
	}
	
	public void salir() {
		padre.remove(Validaciones.numeroElemento(padre, tituloTab));
	}
}
